<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>flat</title>
</head>
<body>
<script>
    Array.prototype[Symbol.iterator] = function () {
        let arr = [].concat(this) // 合并数组 返回一个新数组
        let getFirst = function(array) {
            let first = array.shift() // 从数组中删除第一个元素，并返回该元素的值
            if (first instanceof Array) {
                if (first.length > 1) {
                    // begin 到 end 原数组的浅拷贝(包括Begin,但是不包括end)
                    arr = first.slice(1).concat(array)
                }
                first = first[0]
            }
            return first
        }
        return {
            next: function() {
                let item = getFirst(arr)
                if (item) {
                    return {
                        value: item,
                        done: false
                    }
                } else {
                    return  {
                        done: true
                    }
                }
            }
        }
    }

    var flat = function(arr) {
        let res = []
        for (let i of arr) { res.push(i)}
        return res.join(',')
    }
    var arr = ['a', ['b', 'c'], '2', ['d', 'e', 'f'], 'g', 3, 4];
    console.log(flat(arr))
</script>
<!--<script src="1.js"></script>-->
</body>
</html>
